package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.*;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAODetalleOrdenCompraServicio;
import pe.com.cotelasa.scp.dominio.service.IServicioDetalleOrdenCompraServicio;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.common.ResultadoValidacion;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.entidad.DetalleOrdenCompraServicio;
import pe.com.cotelasa.scp.entidad.OrdenCompraServicio;

/**
 * @author zer0
 */
@Service
public class ServicioDetalleOrdenCompraServicioImpl implements IServicioDetalleOrdenCompraServicio, Serializable {

    private static final long serialVersionUID = -3899534497036527683L;
    @Inject
    private IDAODetalleOrdenCompraServicio daoDetalleOrdenCompraServicio;

    @Override
    public Collection<DetalleOrdenCompraServicio> listarDetalleOrdenCompraServiciosActivos() throws ServiceException {
        try {
            return daoDetalleOrdenCompraServicio.listarActivos(DetalleOrdenCompraServicio.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<DetalleOrdenCompraServicio> listarTodosDetalleOrdenCompraServicios() throws ServiceException {
        try {
            return daoDetalleOrdenCompraServicio.listarTodos(DetalleOrdenCompraServicio.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoValidacion validarDetalleOrdenCompraServicio(DetalleOrdenCompraServicio detalleOrdenCS) throws ServiceException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public ResultadoServicio guardarDetalleOrdenCompraServicio(DetalleOrdenCompraServicio detalleOrdenCS) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            //detalleOrdenCS.setId(5);
            detalleOrdenCS.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            daoDetalleOrdenCompraServicio.insertar(detalleOrdenCS);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public DetalleOrdenCompraServicio conseguirDetalleOrdenCompraServicioPorId(Integer idDetalleOrdenCompraServicio) throws ServiceException {
        try {
            return daoDetalleOrdenCompraServicio.obtenerEntidadPorId(DetalleOrdenCompraServicio.class, idDetalleOrdenCompraServicio);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoServicio actualizarDetalleOrdenCompraServicio(DetalleOrdenCompraServicio detalleOrdenCS) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoDetalleOrdenCompraServicio.actualizar(detalleOrdenCS);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public Collection<DetalleOrdenCompraServicio> listarDetalleOrdenCompraServiciosPorFiltro(DetalleOrdenCompraServicio detalleOrdenCS) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            return daoDetalleOrdenCompraServicio.obtenerColeccionEntidadPorFiltros(DetalleOrdenCompraServicio.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public List<DetalleOrdenCompraServicio> listarDetallesPorOrden(OrdenCompraServicio ordenCS)throws ServiceException{
          try {
            return daoDetalleOrdenCompraServicio.listarDetallesPorOrden(ordenCS);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public List<DetalleOrdenCompraServicio> listarDetallesParaReporteOC(DetalleOrdenCompraServicio detalle, String ordenar, Date fechaInicio, Date fechaFinal)throws ServiceException{
          try {
            return daoDetalleOrdenCompraServicio.listarDetallesParaReporteOC(detalle,ordenar,fechaInicio,fechaFinal);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public List<DetalleOrdenCompraServicio> listarDetallesParaReporteOS(DetalleOrdenCompraServicio detalle, String ordenar, Date fechaInicio, Date fechaFinal)throws ServiceException{
          try {
            return daoDetalleOrdenCompraServicio.listarDetallesParaReporteOS(detalle,ordenar,fechaInicio,fechaFinal);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    public List<DetalleOrdenCompraServicio> buscarDetalleOrdenCSReporte(DetalleOrdenCompraServicio detalle, String[] listaEstado, Date fechaInicio, Date fechaFinal) 
            throws ServiceException{
          try {
            return daoDetalleOrdenCompraServicio.buscarDetalleOrdenCSReporte(detalle,listaEstado,fechaInicio,fechaFinal);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
}
